/**
 * Iterator class that is generic so it can iterate over any adt.
 * Should be used in conjunction with iterator class.
 * @param <T> The type to iterate over.
 */
public class Iterator <T> {
	/**
	 * References to the current and next nodes of type T that the iterator is controlling.
	 */
	private T current;
	private T next;
	
	/**
	 * Resets the pointers to beginning of list.
	 */
	public void reset();
	
	/**
	 * Tests whether there are any elements left in the iterator.
	 * @return Boolean value on sucess.
	 */
	public boolean hasNext();
	
	
	/**
	 * Returns the given next node in the iterator.
	 * @return T Returns t of the given node.
	 */
	public T next();
	
	
	/**
	 * Return the value pointed to by next, but don't move the references.
	 */
	public T peek();
	
	/**
	 * Allows the substitution of a new value with the old one at the current posiition.
	 * @param oNewValue
	 */
	public void change(T oNewValue);
	
}
